package com.evenmo.tcp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.SocketTimeoutException;

/**
 * This is Description
 * TCP客户端
 * @author moyongjun
 * @date 2019/11/24
 */
public class TCP_ClientDemo {
    public static void main(String[] args) throws IOException {
        Socket s= new Socket("localhost",20006);
        //设置超时时间
        s.setSoTimeout(1000);
        //获取键盘输入
        BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
        //获取输出流,向服务端发送数据
//        PrintStream ps =new PrintStream(s.getOutputStream());
        PrintWriter pw =new PrintWriter(s.getOutputStream());
        BufferedReader brs=new BufferedReader(new InputStreamReader(s.getInputStream()));
        boolean flag=true;
        while (flag){

            String str=br.readLine();

            if ("bye".equalsIgnoreCase(str)){
                flag=!flag;
            }else {
                pw.println(str);
                pw.flush();//用PrintWriter时需要刷新

//ps.println(str);//PrintStream有自动刷新
                //从服务器端接收数据有个时间限制（系统自设，也可以自己设置），超过了这个时间，便会抛出该异常
                try {
                    String s1 = brs.readLine();

                    System.out.println(s1);
                }catch (SocketTimeoutException e){
                    System.out.println("Time out, No response");
                }

            }


        }

        br.close();
        //关闭socket
       if (s!=null){


           //如果构造函数建立起了连接，则关闭套接字，如果没有建立起连接，自然不用关闭
           s.close(); //只关闭socket，其关联的输入输出流也会被关闭
       }

    }
}
